<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>


    <script>
        /* 
            特殊字符：
                *： 匹配前一个表达式 0 次或多次。等价于 {0,}。          >= 0
                +:  匹配前面一个表达式 1 次或者多次。等价于 {1,}。      >= 1
                ?:  匹配前面一个表达式 0 次或者 1 次。等价于 {0,1}。    0,1
          */
        //   const rg = /^a$/;
        //   const rg = /^a*$/;
        const rg = /bo*/;
        console.log(rg.test("a"))
        console.log(rg.test("aa"))
        console.log(rg.test("A ghost boooooed"))
        console.log(rg.test("A bird warbled"))

        console.log("-----------")
        const rg1 = /a+/
        console.log(rg1.test("candy"))
        console.log(rg1.test("caaaaaaaaaandy"))

        console.log("-----------")
        const rg2 = /e?le?/ // e 可有可无
        console.log(rg2.test("angel")) //el
        console.log(rg2.test("angle")) //l

        console.log("------------------")

        /* 
              {n}:    n 是一个正整数，匹配了前面一个字符刚好出现了 n 次。
              {n,}:   n 是一个正整数，匹配前一个字符至少出现了 n 次。           >=n
              {n,m}:  n 和 m 都是整数。匹配前面的字符至少 n 次，最多 m 次。如果 n 或者 m 的值是 0，这个值被忽略。
         */
        const rg3 = /a{2}/
        console.log(rg3.test("candy")) //false
        console.log(rg3.test("caandy")) //aa

        console.log("------------")
        const rg4 = /a{1,3}/        //满足就true
        console.log(rg4.test("candy")) //a
        console.log(rg4.test("caaaandy")) // 

        console.log("------------")
        const rg5 = /^a{3,10}$/     //必须在范围里是true
        console.log(rg5.test("a")) //
        console.log(rg5.test("aa")) //
        console.log(rg5.test("aaa")) //
        console.log(rg5.test("aaaa")) //
        console.log(rg5.test("aaaaa")) //
        console.log(rg5.test("aaaaaaaaaaa")) // 
    </script>

</body>

</html>